Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

499
Vistas
¿Eliminar el texto entre () y [] según la condición en Python?

Estoy tratando de eliminar los caracteres entre paréntesis y corchetes en función de la longitud de los caracteres dentro de los paréntesis y corchetes.

Usando esto :

 def remove_text_inside_brackets(text, brackets="()[]"): count = [0] * (len(brackets) // 2) # count open/close brackets saved_chars = [] for character in text: for i, b in enumerate(brackets): if character == b: # found bracket kind, is_close = divmod(i, 2) count[kind] += (-1)**is_close # `+1`: open, `-1`: close if count[kind] < 0: # unbalanced bracket count[kind] = 0 # keep it else: # found bracket to remove break else: # character is not a [balanced] bracket if not any(count): # outside brackets saved_chars.append(character) return ''.join(saved_chars)

Puedo eliminar los caracteres entre paréntesis y corchetes, pero no sé cómo eliminar los caracteres en función de la longitud de los caracteres internos.

Quería eliminar los caracteres entre paréntesis y corchetes si la longitud <=4 con paréntesis y corchetes si son >4 eliminar solo paréntesis y corchetes. Texto de ejemplo:

 text = "This is a sentence. (RMVE) (Once a day) [twice a day] [RMV]"

Producción:

 print(remove_text_inside_brackets(text))
 This is a sentence.

Salida deseada:

 This is a sentence. Once a day twice a day
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Puede usar una expresión regular simple con re.sub y una función como reemplazo para verificar la duración de la coincidencia:

 import re out = re.sub('\(.*?\)|\[.*?\]', lambda m: '' if len(m.group())<=(4+2) else m.group()[1:-1], text)

Producción:

 'This is a sentence. Once a day twice a day '

Esto le brinda la lógica para verificaciones más complejas, en cuyo caso es posible que desee definir una función con nombre en lugar de una lambda

over 4 years ago · Santiago Trujillo Denunciar

0

¿Qué tal dividir en [ y buscar ] y medir la longitud (dado que cada división con ] será necesariamente más larga que la división normal, 4 se convierte en 5):

 def remove_text_inside_brackets(string): my_str = string.replace('(','[').replace(')',']') out = [] for s in my_str.split('['): if ']' in s and len(s) > 5: s1 = s.rstrip().rstrip(']') + ' ' elif ']' in s and len(s) <= 5: s1 = [''] else: s1 = s out.extend(s1) return ''.join(out).strip() remove_text_inside_brackets(text)

Producción:

 'This is a sentence. RMVE Once a day twice a day'
over 4 years ago · Santiago Trujillo Denunciar

0

Con suerte, alguien mejorará esto, pero como alternativa, esta expresión regular anidada puede funcionar:

 re.sub(r'\[([^)]{5,})\]', '\g<1>', re.sub(r'\(([^)]{5,})\)', '\g<1>', re.sub(r'\[[^\]]{,4}\]', '', re.sub(r'\([^)]{,4}\)', '', text))))

Tenga en cuenta que los espacios adicionales, después del punto y al final de la línea.

El resultado de esto es ligeramente diferente al resultado esperado dado:

 'This is a sentence. Once a day twice a day '

Elimina por completo el texto y los corchetes que lo rodean cuando la longitud es 4 o menos, mientras que reemplaza la coincidencia con solo el texto interior donde la longitud es 5 o más.

Tenga en cuenta que los corchetes anidados, por ejemplo, ((some text) more text) o [(four)] pueden fallar.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda